class NewList:
    def __init__(self, data=None):
        self.data = data[:] if data and isinstance(data, list) else []

    @staticmethod
    def __diff_list(a, b):
        if len(b) == 0:
            return a
        sub = b[:]
        return [x for x in a if not NewList.__is_elem(x, sub)]

    @staticmethod
    def __is_elem(x, sub):
        res = any(map(lambda xx: type(x) == type(xx) and x == xx, sub))
        if res:
            sub.remove(x)
        return res

    def get_list(self):
        return self.data

    def __sub__(self, other):
        if isinstance(other, NewList):
            return NewList(self.__diff_list(self.data, other.data))
        elif isinstance(other, list):
            return NewList(self.__diff_list(self.data, other))
        else:
            raise TypeError("unsupported operand type(s) for -: 'NewList' and '{}'".format(type(other)))

    def __rsub__(self, other):
        if isinstance(other, NewList):
            return NewList(self.__diff_list(other.data, self.data))
        elif isinstance(other, list):
            return NewList(self.__diff_list(other, self.data))
        else:
            raise TypeError("unsupported operand type(s) for -: '{}' and 'NewList'".format(type(other)))

    def __str__(self):
        return str(self.data)